package com.linux.huhx.business.service;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 学习分享的服务类
 * 
 * @author huhx
 * @date: 2016年12月24日 下午6:17:07
 */
public class LearnShareService {
	private SqlSessionTemplate sqlSessionTemplate;

	private TransactionTemplate transactionTemplate;

	// 保存学习分享 并更新评论表
	public void saveUseLeanShare(final Map<String, Object> map) {
		transactionTemplate.execute(new TransactionCallback<Object>() {
			@Override
			public Object doInTransaction(TransactionStatus status) {
				// 保存学习分享数据
				sqlSessionTemplate.insert("learnshare.insertUserLeanShare", map);
				// 添加评估表数据
				Map<String, Object> evaluteMap = new HashMap<>();
				evaluteMap.put("type", map.get("type"));
				evaluteMap.put("contentId", map.get("learnShareId"));
				sqlSessionTemplate.insert("learnshare.insertLearnShareEvalute", evaluteMap);
				return null;
			}
		});
	}

	// 查询学习分享是否已经存在
	public boolean queryLearnShareExist(String content) {
		String shareId = sqlSessionTemplate.selectOne("learnshare.queryLearnShareExist", content);
		if (shareId == null || shareId.equals("")) {
			return false;
		}
		return true;
	}

	// 更新评估的数目 不能取消
	public boolean updateEvaluateNum(Map<String, Object> map) {
		int effectCount = sqlSessionTemplate.update("learnshare.updateLearnShareEvalute", map);
		if (effectCount < 1) {
			return false;
		}
		return true;
	}

	// 根据一些条件查询要显示的内容
	public List<Map<String, String>> queryLearnShareInfos(Map<String, Object> map) {
		// 这里的RowBound实现的是逻辑分页，就是全部查询出来再处理。
		// List<Map<String, String>> lists =
		// sqlSessionTemplate.selectList("learnshare.queryLearnShareInfoList",
		// map, new RowBounds(index * limit, limit));
		// 实现物理分页，使用mysql语句也可以实现
		List<Map<String, String>> lists = sqlSessionTemplate.selectList("learnshare.queryLearnShareInfoList", map);
		return lists;
	}

	// 管理员查询需要审核的内容
	public List<Map<String, String>> queryNeedAuditContentList(Map<String, Object> map) {
		List<Map<String, String>> lists = sqlSessionTemplate.selectList("learnshare.queryLearnShareInfoList", map);
		return lists;
	}

	// 管理员进行审核
	public void updateAuditContentStatus(Map<String, Object> map) {
		sqlSessionTemplate.update("learnshare.updateLearnShareEvalute", map);
	}
}
